<!DOCTYPE html>
<html lang="en">
  <head>
    <title>
        Java-framework-SpringCloud-1 - rulerLwx Blog
      </title>
        <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport"
      content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui">
    <meta name="renderer" content="webkit">
    <meta http-equiv="Cache-Control" content="no-transform" />
    <meta http-equiv="Cache-Control" content="no-siteapp" />
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="format-detection" content="telephone=no,email=no,adress=no">
    
    <meta name="theme-color" content="#000000" />
    
    <meta http-equiv="window-target" content="_top" />
    
    
    <meta name="description" content="概述 单体框架 什么是单体框架？系统中所有的功能、模块耦合在一个应用中的框架。 特点：最终会打包成一个独立的单元（jar/war包），会以一个进程" />
    <meta name="generator" content="Hugo 0.73.0 with theme pure" />
    <title>Java-framework-SpringCloud-1 - rulerLwx Blog</title>
    
    
    <link rel="stylesheet" href="https://rulerLwx.gitee.io/css/style.min.c4bc7071f132c964c2116bca53b392933f377e5ca7b7051ed245187c621a2d3e.css">
    
    <link rel="stylesheet" href="https://cdn.staticfile.org/highlight.js/9.15.10/styles/github.min.css" async>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.4.2/tocbot.css" async>
    <meta property="og:title" content="Java-framework-SpringCloud-1" />
<meta property="og:description" content="概述 单体框架 什么是单体框架？系统中所有的功能、模块耦合在一个应用中的框架。 特点：最终会打包成一个独立的单元（jar/war包），会以一个进程" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://rulerLwx.gitee.io/2020/07/java-framework-springcloud-1/" />
<meta property="article:published_time" content="2020-07-01T18:58:47+08:00" />
<meta property="article:modified_time" content="2020-07-01T18:58:47+08:00" />
<meta itemprop="name" content="Java-framework-SpringCloud-1">
<meta itemprop="description" content="概述 单体框架 什么是单体框架？系统中所有的功能、模块耦合在一个应用中的框架。 特点：最终会打包成一个独立的单元（jar/war包），会以一个进程">
<meta itemprop="datePublished" content="2020-07-01T18:58:47&#43;08:00" />
<meta itemprop="dateModified" content="2020-07-01T18:58:47&#43;08:00" />
<meta itemprop="wordCount" content="4789">



<meta itemprop="keywords" content="" /><meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Java-framework-SpringCloud-1"/>
<meta name="twitter:description" content="概述 单体框架 什么是单体框架？系统中所有的功能、模块耦合在一个应用中的框架。 特点：最终会打包成一个独立的单元（jar/war包），会以一个进程"/>

    <!--[if lte IE 9]>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/classlist/1.1.20170427/classList.min.js"></script>
      <![endif]-->

    <!--[if lt IE 9]>
        <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
        <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
      <![endif]-->
  </head>

  
  

  <body class="main-center theme-black" itemscope itemtype="http://schema.org/WebPage"><header class="header" itemscope itemtype="http://schema.org/WPHeader">
    <div class="slimContent">
      <div class="navbar-header">
        <div class="profile-block text-center">
          <a id="avatar" href="https://gitee.com/rulerLwx" target="_blank">
            <img class="img-circle img-rotate" src="https://rulerLwx.gitee.io/avatar.png" width="200" height="200">
          </a>
          <h2 id="name" class="hidden-xs hidden-sm">rulerLwx</h2>
          <h3 id="title" class="hidden-xs hidden-sm hidden-md">thinking...</h3>
          <small id="location" class="text-muted hidden-xs hidden-sm"><i class="icon icon-map-marker"></i>Guangzhou, China</small>
        </div><div class="search" id="search-form-wrap">
    <form class="search-form sidebar-form">
        <div class="input-group">
            <input type="text" class="search-form-input form-control" placeholder="Search" />
            <span class="input-group-btn">
                <button type="submit" class="search-form-submit btn btn-flat" onclick="return false;"><i
                        class="icon icon-search"></i></button>
            </span>
        </div>
        <div class="ins-search">
            <div class="ins-search-mask"></div>
            <div class="ins-search-container">
                <div class="ins-input-wrapper">
                    <input type="text" class="ins-search-input" placeholder="Type something..."
                        x-webkit-speech />
                    <button type="button" class="close ins-close ins-selectable" data-dismiss="modal"
                        aria-label="Close"><span aria-hidden="true">×</span></button>
                </div>
                <div class="ins-section-wrapper">
                    <div class="ins-section-container"></div>
                </div>
            </div>
        </div>
    </form>
</div>
        <button class="navbar-toggle collapsed" type="button" data-toggle="collapse" data-target="#main-navbar" aria-controls="main-navbar" aria-expanded="false">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
      </div>
      <nav id="main-navbar" class="collapse navbar-collapse" itemscope itemtype="http://schema.org/SiteNavigationElement" role="navigation">
        <ul class="nav navbar-nav main-nav">
            <li class="menu-item menu-item-home">
                <a href="/">
                    <i class="icon icon-home-fill"></i>
                  <span class="menu-title">Home</span>
                </a>
            </li>
            <li class="menu-item menu-item-archives">
                <a href="/posts/">
                    <i class="icon icon-archives-fill"></i>
                  <span class="menu-title">Archives</span>
                </a>
            </li>
            <li class="menu-item menu-item-categories">
                <a href="/categories/">
                    <i class="icon icon-folder"></i>
                  <span class="menu-title">Categories</span>
                </a>
            </li>
            <li class="menu-item menu-item-tags">
                <a href="/tags/">
                    <i class="icon icon-tags"></i>
                  <span class="menu-title">Tags</span>
                </a>
            </li>
            <li class="menu-item menu-item-about">
                <a href="/about/">
                    <i class="icon icon-cup-fill"></i>
                  <span class="menu-title">About</span>
                </a>
            </li>
        </ul>
      </nav>
    </div>
  </header>

<aside class="sidebar" itemscope itemtype="http://schema.org/WPSideBar">
  <div class="slimContent">
    
      <div class="widget">
    <h3 class="widget-title">Board</h3>
    <div class="widget-body">
        <div id="board">
            <div class="content">enjoy~
            </div>
        </div>
    </div>
</div>

      <div class="widget">
    <h3 class="widget-title"> Categories</h3>
    <div class="widget-body">
        <ul class="category-list">
            <li class="category-list-item"><a href="https://rulerLwx.gitee.io/categories/java-framework/" class="category-list-link">java-framework</a><span class="category-list-count">38</span></li>
            <li class="category-list-item"><a href="https://rulerLwx.gitee.io/categories/java-front-end/" class="category-list-link">java-front-end</a><span class="category-list-count">11</span></li>
            <li class="category-list-item"><a href="https://rulerLwx.gitee.io/categories/java-se/" class="category-list-link">java-se</a><span class="category-list-count">21</span></li>
            <li class="category-list-item"><a href="https://rulerLwx.gitee.io/categories/java-senior/" class="category-list-link">java-senior</a><span class="category-list-count">4</span></li>
            <li class="category-list-item"><a href="https://rulerLwx.gitee.io/categories/linux/" class="category-list-link">linux</a><span class="category-list-count">13</span></li>
            <li class="category-list-item"><a href="https://rulerLwx.gitee.io/categories/tools/" class="category-list-link">tools</a><span class="category-list-count">1</span></li>
            <li class="category-list-item"><a href="https://rulerLwx.gitee.io/categories/%E6%8A%80%E6%9C%AF%E6%9D%82%E7%83%A9/" class="category-list-link">技术杂烩</a><span class="category-list-count">4</span></li>
            <li class="category-list-item"><a href="https://rulerLwx.gitee.io/categories/%E6%95%B0%E6%8D%AE%E5%BA%93/" class="category-list-link">数据库</a><span class="category-list-count">15</span></li>
        </ul>
    </div>
</div>
      <div class="widget">
    <h3 class="widget-title"> Tags</h3>
    <div class="widget-body">
        <ul class="tag-list">
            
            
            <li class="tag-list-item"><a href="https://rulerLwx.gitee.io/tags/jvm/" class="tag-list-link">jvm</a><span
                    class="tag-list-count">1</span></li>
            
            
            <li class="tag-list-item"><a href="https://rulerLwx.gitee.io/tags/%E5%A4%9A%E7%BA%BF%E7%A8%8B/" class="tag-list-link">多线程</a><span
                    class="tag-list-count">2</span></li>
            
            
            <li class="tag-list-item"><a href="https://rulerLwx.gitee.io/tags/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/" class="tag-list-link">网络编程</a><span
                    class="tag-list-count">3</span></li>
            
        </ul>

    </div>
</div>
      
<div class="widget">
    <h3 class="widget-title">Recent Posts</h3>
    <div class="widget-body">
        <ul class="recent-post-list list-unstyled no-thumbnail">
            <li>
                <div class="item-inner">
                    <p class="item-title">
                        <a href="https://rulerLwx.gitee.io/2020/07/%E8%87%AA%E5%B7%B1%E5%8A%A8%E6%89%8B%E4%B8%80%E6%89%B9%E9%87%8F%E7%A7%BB%E5%8A%A8%E9%87%8D%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6/" class="title">自己动手（一）——批量移动、重命名文件</a>
                    </p>
                    <p class="item-date">
                        <time datetime="2020-07-27 17:50:02 &#43;0800 CST" itemprop="datePublished">2020-07-27</time>
                    </p>
                </div>
            </li>
            <li>
                <div class="item-inner">
                    <p class="item-title">
                        <a href="https://rulerLwx.gitee.io/2020/07/%E5%85%B3%E4%BA%8Einteger%E7%9A%84-128~127%E7%BC%93%E5%AD%98/" class="title">关于Integer的 -128~127缓存</a>
                    </p>
                    <p class="item-date">
                        <time datetime="2020-07-11 16:56:21 &#43;0800 CST" itemprop="datePublished">2020-07-11</time>
                    </p>
                </div>
            </li>
            <li>
                <div class="item-inner">
                    <p class="item-title">
                        <a href="https://rulerLwx.gitee.io/2020/07/%E8%B7%A8%E5%9F%9F%E9%97%AE%E9%A2%98/" class="title">跨域问题</a>
                    </p>
                    <p class="item-date">
                        <time datetime="2020-07-08 22:41:12 &#43;0800 CST" itemprop="datePublished">2020-07-08</time>
                    </p>
                </div>
            </li>
            <li>
                <div class="item-inner">
                    <p class="item-title">
                        <a href="https://rulerLwx.gitee.io/2020/07/%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/" class="title">个人博客搭建</a>
                    </p>
                    <p class="item-date">
                        <time datetime="2020-07-05 18:58:47 &#43;0800 CST" itemprop="datePublished">2020-07-05</time>
                    </p>
                </div>
            </li>
            <li>
                <div class="item-inner">
                    <p class="item-title">
                        <a href="https://rulerLwx.gitee.io/2020/07/centos/" class="title">CentOS-</a>
                    </p>
                    <p class="item-date">
                        <time datetime="2020-07-01 18:58:47 &#43;0800 CST" itemprop="datePublished">2020-07-01</time>
                    </p>
                </div>
            </li>
        </ul>
    </div>
</div>
  </div>
</aside>

    
    
<aside class="sidebar sidebar-toc collapse" id="collapseToc" itemscope itemtype="http://schema.org/WPSideBar">
  <div class="slimContent">
    <h4 class="toc-title">Catalogue</h4>
    <nav id="toc" class="js-toc toc">

    </nav>
  </div>
</aside>
<main class="main" role="main"><div class="content">
  <article id="-" class="article article-type-" itemscope
    itemtype="http://schema.org/BlogPosting">
    
    <div class="article-header">
      <h1 itemprop="name">
  <a
    class="article-title"
    href="/2020/07/java-framework-springcloud-1/"
    >Java-framework-SpringCloud-1</a
  >
</h1>

      <div class="article-meta">
        
<span class="article-date">
  <i class="icon icon-calendar-check"></i>&nbsp;
<a href="https://rulerLwx.gitee.io/2020/07/java-framework-springcloud-1/" class="article-date">
  <time datetime="2020-07-01 18:58:47 &#43;0800 CST" itemprop="datePublished">2020-07-01</time>
</a>
</span>
<span class="article-category">
  <i class="icon icon-folder"></i>&nbsp;
  <a class="article-category-link" href="/categories/java-framework/"> Java-framework </a>
</span>

        <span class="post-comment"><i class="icon icon-comment"></i>&nbsp;<a href="/2020/07/java-framework-springcloud-1/#comments"
            class="article-comment-link">Comments</a></span>
		<span class="post-wordcount hidden-xs" itemprop="wordCount">Word Count: 4789words</span>
		<span class="post-readcount hidden-xs" itemprop="timeRequired">Read Count: 10minutes </span>
      </div>
    </div>
    <div class="article-entry marked-body js-toc-content" itemprop="articleBody">
      <h1 id="概述">概述</h1>
<h2 id="单体框架">单体框架</h2>
<p>什么是单体框架？系统中所有的功能、模块耦合在一个应用中的框架。</p>
<p>特点：最终会打包成一个独立的单元（jar/war包），会以一个进程方式进行。</p>
<p>图示：</p>
<p><img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708104309.png" alt=""></p>
<p>优点：易于管理、部署简单</p>
<p>缺点：测试成本高、可伸缩性差、可选性差、系统迭代困难、跨语言程度差、团队协作难</p>
<h2 id="微服务框架">微服务框架</h2>
<p>什么是微服务？微服务是一种框架风格，一个大型复杂的软件应用，由一个或多个微服务组成，每个微服务可以独立部署，各个微服务之间是松耦合的，每个微服务只关注一件任务并很好地完成。</p>
<p>常见的框架风格：</p>
<ol>
<li>客户端与服务端</li>
<li>基于组件模型的框架（EJB）</li>
<li>分层框架（MVC）</li>
<li>面向服务（SOA）</li>
</ol>
<p>微服务特点：</p>
<p>微服务优点：易于测试、伸缩性强、可靠性强（一个服务出问题，不影响其它服务）、跨语言、团队协作容易、系统迭代容易</p>
<p>微服务缺点：运维成本高、部署数量较多、接口兼容多版本、系统的复杂性、分布式事务</p>
<h2 id="常见框架mvcrpcsoa微服务框架">常见框架：MVC/RPC/SOA/微服务框架</h2>
<p><img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708104332.png" alt=""></p>
<p>MVC：单体框架，代表技术：struts2/springmvc/spring/mybatis</p>
<p>RPC（Remote Procedure Call）：远程过程调用。通过网络从远程计算机程序上请求服务，而不需要了解底层网络技术。代表技术：Thrift/Hessian。注：RPC各个服务之间是没有通信的。</p>
<p>SOA（Service Oriented Architecture）：面向服务框架。ESB（Enterparise Service Bus）：企业服务总线，是一个服务中介，提供服务与服务之间的交互。ESB包含的功能：负载均衡、流量控制、加密处理、服务监控、异常处理等。技术代表：Mule/WSO2</p>
<p>微服务：轻量级的服务治理方案。用zookeper/eureka代替ESB。代表技术：springcloud/dubbo</p>
<h2 id="如何设计微服务以及设计原则">如何设计微服务以及设计原则</h2>
<ol>
<li>AKF 拆分原则</li>
<li>前后端分离原则</li>
<li>无状态服务</li>
<li>RestFul 的通信风格</li>
</ol>
<p>其中 AKF 拆分原则 是重点。</p>
<h3 id="akf-拆分原则">AKF 拆分原则</h3>
<p>业界对于可扩展的系统架构设计有一个朴素的理念,就是：</p>
<p>通过加机器就可以解决容量和可用性问题。(如果一台不行那就两台)。</p>
<p>我是个段子：（世界上没有什么事是一顿烧烤不能解决的。如果有，那就两顿。）</p>
<p>这一理念在“云计算”概念疯狂流行的今天，得到了广泛的认可！对于一个规模
迅速增长的系统而言，容量和性能问题当然是首当其冲的。但是随着时间的向前，
系统规模的增长，除了面对性能与容量的问题外，还需要面对功能与模块数量上
的增长带来的系统复杂性问题以及业务的变化带来的提供差异化服务问题。而许
多系统，在架构设计时并未充分考虑到这些问题，导致系统的重构成为常态，从
而影响业务交付能力，还浪费人力财力！对此，《可扩展的艺术》一书提出了一
个更加系统的可扩展模型—— AKF 可扩展立方（Scalability Cube）。这个立方
体中沿着三个坐标轴设置分别为：X、Y、Z。</p>
<p><img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708104401.png" alt=""></p>
<h4 id="y-轴功能">Y 轴(功能)</h4>
<p>Y 轴扩展会将庞大的整体应用拆分为多个服务。每个服务实现一组相关的功
能，如订单管理、客户管理等。在工程上常见的方案是服务化架构(SOA) 。比
如对于一个电子商务平台，我们可以拆分成不同的服务，组成下面这样的架构：</p>
<p><img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708104416.png" alt=""></p>
<p>但通过观察上图容易发现，当服务数量增多时，服务调用关系变得复杂。为
系统添加一个新功能，要调用的服务数也变得不可控，由此引发了服务管理上的
混乱。所以，一般情况下，需要采用服务注册的机制形成服务网关来进行服务治
理。系统的架构将变成下图所示：</p>
<p><img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708104507.png" alt=""></p>
<h4 id="x-轴水平扩展">X 轴(水平扩展)</h4>
<p>X 轴扩展与我们前面朴素理念是一致的，通过绝对平等地复制服务与数据，
以解决容量和可用性的问题。其实就是将微服务运行多个实例，做集群加负载均
衡的模式。</p>
<p>为了提升单个服务的可用性和容量， 对每一个服务进行X 轴扩展划分。</p>
<p><img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708104533.png" alt=""></p>
<h4 id="z-轴数据分区">Z 轴(数据分区)</h4>
<p>Z 轴扩展通常是指基于请求者或用户独特的需求，进行系统划分，并使得划
分出来的子系统是相互隔离但又是完整的。以生产汽车的工厂来举例：福特公司
为了发展在中国的业务，或者利用中国的廉价劳动力，在中国建立一个完整的子
工厂，与美国工厂一样，负责完整的汽车生产。这就是一种Z 轴扩展。</p>
<p>工程领域常见的Z 轴扩展有以下两种方案：</p>
<p>1）单元化架构</p>
<p>在分布式服务设计领域，一个单元（Cell）就是满足某个分区所有业务操作
的自包含闭环。如上面我们说到的Y 轴扩展的SOA 架构，客户端对服务端节点
的选择一般是随机的，但是，如果在此加上Z 轴扩展，那服务节点的选择将不再
是随机的了，而是每个单元自成一体。如下图：</p>
<p><img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708104547.png" alt=""></p>
<p>2）数据分区</p>
<p>为了性能数据安全上的考虑，我们将一个完整的数据集按一定的维度划分出
不同的子集。一个分区（Shard），就是是整体数据集的一个子集。比如用尾
号来划分用户，那同样尾号的那部分用户就可以认为是一个分区。数据分区为一
般包括以下几种数据划分的方式：</p>
<p><img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708104606.png" alt=""></p>
<h3 id="前后端分离原则">前后端分离原则</h3>
<p><img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708104644.png" alt=""></p>
<p>何为前后端分离？前后端本来不就分离么？这要从尴尬的jsp 讲起。分工精细化从来都
是蛋糕做大的原则，多个领域工程师最好在不需要接触其他领域知识的情况下合作，才可能
使效率越来越高，维护也会变得简单。jsp 的模板技术融合了html 和java 代码，使得传统
MVC 开发中的前后端在这里如胶似漆，前端做好页面，后端转成模板，发现问题再找前端，
前端又看不懂java 代码&hellip;&hellip;前后端分离的目的就是将这尴尬局面打破。</p>
<p>前后端分离原则，简单来讲就是前端和后端的代码分离，我们推荐的模式是最好采用物
理分离的方式部署，进一步促使更彻底的分离。如果继续直接使用服务端模板技术，如：jsp，
把java、js、html、css 都堆到一个页面里，稍微复杂一点的页面就无法维护了。</p>
<p><img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708104708.png" alt=""></p>
<p>这种分离方式有几个好处：</p>
<p>1）前后端技术分离，可以由各自的专家来对各自的领域进行优化，这样前段的用户体
验优化效果更好。</p>
<p>2）分离模式下，前后端交互界面更清晰，就剩下了接口模型，后端的接口简洁明了，
更容易维护。</p>
<p>3）前端多渠道集成场景更容易实现，后端服务无需变更，采用统一的数据和模型，可
以支持多个前端：例如：微信h5 前端、PC 前端、安卓前端、IOS 前端。</p>
<h3 id="无状态服务">无状态服务</h3>
<p><img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708104727.png" alt=""></p>
<p>对于无状态服务，首先说一下什么是状态：如果一个数据需要被多个服务共
享，才能完成一笔交易，那么这个数据被称为状态。进而依赖这个“状态”数据的
服务被称为有状态服务，反之称为无状态服务。</p>
<p>那么这个无状态服务原则并不是说在微服务架构里就不允许存在状态，表达
的真实意思是要把有状态的业务服务改变为无状态的计算类服务，那么状态数据
也就相应的迁移到对应的“有状态数据服务”中。</p>
<p>场景说明：例如我们以前在本地内存中建立的数据缓存、Session 缓存，到
现在的微服务架构中就应该把这些数据迁移到分布式缓存中存储，让业务服务变
成一个无状态的计算节点。迁移后，就可以做到按需动态伸缩，微服务应用在运
行时动态增删节点，就不再需要考虑缓存数据如何同步的问题。</p>
<h3 id="restful-的通讯风格">RestFul 的通讯风格</h3>
<p><img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708104753.png" alt=""></p>
<p>作为一个原则来讲本来应该是个“无状态通信原则”，在这里我们直接推荐一
个实践优选的Restful 通信风格，因为他有很多好处：</p>
<ol>
<li>
<p>无状态协议HTTP，具备先天优势，扩展能力很强。例如需要安全加密，有现成的成熟方案HTTPS 即可。</p>
</li>
<li>
<p>JSON 报文序列化，轻量简单，人与机器均可读，学习成本低，搜索引擎友好。</p>
</li>
<li>
<p>语言无关，各大热门语言都提供成熟的Restful API 框架，相对其他的一些RPC 框架生态更完善。</p>
</li>
</ol>
<h1 id="入门">入门</h1>
<h2 id="什么是springcloud">什么是SpringCloud</h2>
<p>什么是SpringCloud：是一个服务治理平台，提供了一些服务框架。包含了：服务注册与发现、配置中心、消息中心、负载均衡、数据监控等等。</p>
<h3 id="概念定义">概念定义</h3>
<p>Spring Cloud 是一个微服务框架，相比Dubbo 等RPC 框架, Spring Cloud 提供的全套的分布式系统解决方案。</p>
<p>Spring Cloud 对微服务基础框架Netflix 的多个开源组件进行了封装，同时又实现了和云端平台以及和Spring Boot 开发框架的集成。</p>
<p>Spring Cloud 为微服务架构开发涉及的配置管理，服务治理，熔断机制，智能路由，
微代理，控制总线，一次性token，全局一致性锁，leader 选举，分布式session，集
群状态管理等操作提供了一种简单的开发方式。</p>
<p>Spring Cloud 为开发者提供了快速构建分布式系统的工具，开发者可以快速的启动
服务或构建应用、同时能够快速和云平台资源进行对接。</p>
<h3 id="spring-cloud-的子项目">Spring Cloud 的子项目</h3>
<p><img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708104822.png" alt="">
<img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708104836.png" alt=""></p>
<ul>
<li>Spring Cloud Config：配置管理工具，支持使用Git 存储配置内容，支持应
用配置的外部化存储，支持客户端配置信息刷新、加解密配置内容等</li>
<li>Spring Cloud Bus：事件、消息总线，用于在集群（例如，配置变化事件）中
传播状态变化，可与Spring Cloud Config 联合实现热部署。</li>
<li>Spring Cloud Netflix：针对多种Netflix 组件提供的开发工具包，其中包括
Eureka、Hystrix、Zuul、Archaius 等。
<ul>
<li>Netflix Eureka：一个基于rest 服务的服务治理组件，包括服务注册中
心、服务注册与服务发现机制的实现，实现了云端负载均衡和中间层服务器
的故障转移。</li>
<li>Netflix Hystrix：容错管理工具，实现断路器模式，通过控制服务的节点,
从而对延迟和故障提供更强大的容错能力。</li>
<li>Netflix Ribbon：客户端负载均衡的服务调用组件。</li>
<li>Netflix Feign：基于Ribbon 和Hystrix 的声明式服务调用组件。</li>
<li>Netflix Zuul：微服务网关，提供动态路由，访问过滤等服务。</li>
<li>Netflix Archaius：配置管理API，包含一系列配置管理API，提供动
态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。</li>
</ul>
</li>
<li>Spring Cloud for Cloud Foundry ： 通过Oauth2 协议绑定服务到
CloudFoundry，CloudFoundry 是VMware 推出的开源PaaS 云平台。</li>
<li>Spring Cloud Sleuth：日志收集工具包，封装了Dapper,Zipkin 和HTrace
操作。</li>
<li>Spring Cloud Data Flow：大数据操作工具，通过命令行方式操作数据流。</li>
<li>Spring Cloud Security：安全工具包，为你的应用程序添加安全控制，主要
是指OAuth2。</li>
<li>Spring Cloud Consul：封装了Consul 操作，consul 是一个服务发现与配
置工具，与Docker 容器可以无缝集成。</li>
<li>Spring Cloud Zookeeper ： 操作Zookeeper 的工具包， 用于使用
zookeeper 方式的服务注册和发现。</li>
<li>Spring Cloud Stream：数据流操作开发包，封装了与Redis,Rabbit、
Kafka 等发送接收消息。</li>
<li>Spring Cloud CLI：基于Spring Boot CLI，可以让你以命令行方式快速
建立云组件。</li>
</ul>
<h2 id="springcloud-与dubbo-的区别">SpringCloud 与Dubbo 的区别</h2>
<p><img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708104858.png" alt=""></p>
<p>dubbo官网：http://dubbo.apache.org</p>
<h2 id="spring-cloud-版本说明">Spring Cloud 版本说明</h2>
<h3 id="常见版本号说明">常见版本号说明</h3>
<p>示例：</p>
<p>软件版本号：2.0.2.RELEASE</p>
<p>2：主版本号。当功能模块有较大更新或者整体架构发生变化时，主版本号会更新</p>
<p>0：次版本号。次版本表示只是局部的一些变动。</p>
<p>2：修改版本号。一般是bug 的修复或者是小的变动</p>
<p>RELEASE:希腊字母版本号。次版本号用户标注当前版本的软件处于哪个开发阶段</p>
<p>知识点：</p>
<p>Base：设计阶段。只有相应的设计没有具体的功能实现。</p>
<p>Alpha：软件的初级版本。存在较多的bug</p>
<p>Bate：表示相对alpha 有了很大的进步，消除了严重的bug，还存在一些潜在的bug。</p>
<p>Release：该版本表示最终版。</p>
<h3 id="spring-cloud-版本号说明">Spring Cloud 版本号说明</h3>
<p><img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708104919.png" alt=""></p>
<p>1）为什么Spring Cloud 版本用的是单词而不是数字？</p>
<p>设计的目的是为了更好的管理每个Spring Cloud 的子项目的清单。避免子的版本号与子
项目的版本号混淆。</p>
<p>2）版本号单词的定义规则</p>
<p>采用伦敦的地铁站名称来作为版本号的命名，根据首字母排序，字母顺序靠后的版本号
越大。</p>
<p>3）版本发布计划说明</p>
<p><img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708104941.png" alt=""></p>
<h3 id="spring-cloud-与子项目版本兼容说明">Spring Cloud 与子项目版本兼容说明</h3>
<p><img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708104955.png" alt=""></p>
<h2 id="spring-cloud-与-spring-boot-的关系">Spring Cloud 与 Spring Boot 的关系</h2>
<ul>
<li>Spring Boot 做单个应用开发， Spring Cloud 是宏观方面，将各个应用关联起来</li>
<li>Spring Boot 可以单独开发，Spring Cloud 离不开 Spring Boot</li>
</ul>
<h2 id="目前成熟的互联网框架">目前成熟的互联网框架</h2>
<p>1）应用服务化拆分+消息中间件：</p>
<p><img src="https://gitee.com/rulerLwx/PicGo/raw/master/img/20200708105019.png" alt=""></p>
<p>2）todo&hellip;</p>
<h2 id="文档资料">文档资料</h2>
<ul>
<li>中文文档：https://www.springcloud.cc/</li>
<li>中国社区：http://springcloud.cn/</li>
</ul>
<h1 id="rabbitmq">RabbitMQ</h1>
<p>查看《Java-framework-RabbitMQ》</p>
<h1 id="eureka注册中心">Eureka注册中心</h1>
<p>查看《Java-framework-SpringCloud-2-Eureka》</p>

    </div>
    <div class="article-footer">
<blockquote class="mt-2x">
  <ul class="post-copyright list-unstyled">
    <li class="post-copyright-link hidden-xs">
      <strong>Permalink: </strong>
      <a href="https://rulerLwx.gitee.io/2020/07/java-framework-springcloud-1/" title="Java-framework-SpringCloud-1" target="_blank" rel="external">https://rulerLwx.gitee.io/2020/07/java-framework-springcloud-1/</a>
    </li>
    <li class="post-copyright-license">
      <strong>License：</strong><a href="http://creativecommons.org/licenses/by/4.0/deed.zh" target="_blank" rel="external">CC BY 4.0 CN</a>
    </li>
  </ul>
</blockquote>

<div class="panel panel-default panel-badger">
  <div class="panel-body">
    <figure class="media">
      <div class="media-left">
        <a href="https://gitee.com/rulerLwx" target="_blank" class="img-burn thumb-sm visible-lg">
          <img src="https://rulerLwx.gitee.io/avatar.png" class="img-rounded w-full" alt="">
        </a>
      </div>
      <div class="media-body">
        <h3 class="media-heading"><a href="https://gitee.com/rulerLwx" target="_blank"><span class="text-dark">rulerLwx</span><small class="ml-1x">thinking...</small></a></h3>
        <div>Good Good Study, Day Day Up~</div>
      </div>
    </figure>
  </div>
</div>
    </div>
  </article>
<section id="comments">
    <div id="vcomments"></div>
</section>

</div><nav class="bar bar-footer clearfix" data-stick-bottom>
    <div class="bar-inner">
        <ul class="pager pull-left">
            <li class="prev">
                <a href="https://rulerLwx.gitee.io/2020/07/java-framework-springcloud-2-eureka/" title="Java-framework-SpringCloud-2-Eureka"><i
                        class="icon icon-angle-left"
                        aria-hidden="true"></i><span>&nbsp;&nbsp;Older</span></a>
            </li>
            <li class="next">
                <a href="https://rulerLwx.gitee.io/2020/07/java-framework-springboot-6-%E6%95%B4%E5%90%88-redis-%E5%93%A8%E5%85%B5-sentinel/"
                    title="Java-framework-SpringBoot-6-整合 Redis 哨兵 Sentinel"><span>Newer&nbsp;&nbsp;</span><i
                        class="icon icon-angle-right" aria-hidden="true"></i></a>
            </li>
            
            <li class="toggle-toc">
                <a class="toggle-btn collapsed" data-toggle="collapse" href="#collapseToc" aria-expanded="false"
                    title="Catalogue" role="button">
                    <span>[&nbsp;</span><span>Catalogue</span>
                    <i class="text-collapsed icon icon-anchor"></i>
                    <i class="text-in icon icon-close"></i>
                    <span>]</span>
                </a>
            </li>
        </ul>
        <div class="bar-right">
            <div class="share-component" data-sites="weibo,qq,wechat"
                data-mobile-sites="weibo,qq,qzone"></div>
        </div>
    </div>
</nav>

</main><footer class="footer" itemscope itemtype="http://schema.org/WPFooter">
<ul class="social-links">
    <li><a href="https://gitee.com/rulerLwx" target="_blank" title="gitee" data-toggle=tooltip data-placement=top >
            <i class="icon icon-gitee"></i></a></li>
    <li><a href="https://github.com/wolf-lea" target="_blank" title="github" data-toggle=tooltip data-placement=top >
            <i class="icon icon-github"></i></a></li>
</ul>
  <div class="copyright">
    &copy;2020  -
    2020
    <div class="publishby">
        Theme by <a href="https://github.com/xiaoheiAh" target="_blank"> xiaoheiAh </a>base on<a href="https://github.com/xiaoheiAh/hugo-theme-pure" target="_blank"> pure</a>.
    </div>
  </div>
</footer>

<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_SVG"></script>
<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
            showMathMenu: false, //disables context menu
            tex2jax: {
            inlineMath: [ ['$','$'], ['\\(','\\)'] ]
           }
    });
</script>


<script src="https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.min.js"></script>
<script>
    window.jQuery || document.write('<script src="js/jquery.min.js"><\/script>')
</script>
<script type="text/javascript" src="https://cdn.staticfile.org/highlight.js/9.15.10/highlight.min.js"></script>
<script type="text/javascript" src="https://cdn.staticfile.org/highlight.js/9.15.10/languages/python.min.js" defer></script>
<script type="text/javascript" src="https://cdn.staticfile.org/highlight.js/9.15.10/languages/javascript.min.js" defer></script><script>
    hljs.configure({
        tabReplace: '    ', 
        classPrefix: ''     
        
    })
    hljs.initHighlightingOnLoad();
</script>
<script src="https://rulerLwx.gitee.io/js/application.min.bdeb64b910570b6c41badc6a05b7afb0c8ad9efd8525de3c7257d59e786326a3.js"></script>
<script src="https://rulerLwx.gitee.io/js/plugin.min.51ff8c7317566f82259170fa36e09c4493adc9b9378b427a01ad3f017ebac7dd.js"></script>

<script>
    (function (window) {
        var INSIGHT_CONFIG = {
            TRANSLATION: {
                POSTS: 'Posts',
                PAGES: 'Pages',
                CATEGORIES: 'Categories',
                TAGS: 'Tags',
                UNTITLED: '(Untitled)',
            },
            ROOT_URL: 'https:\/\/rulerLwx.gitee.io',
            CONTENT_URL: 'https:\/\/rulerLwx.gitee.io\/searchindex.json ',
        };
        window.INSIGHT_CONFIG = INSIGHT_CONFIG;
    })(window);
</script>
<script type="text/javascript" src="https://rulerLwx.gitee.io/js/insight.min.a343cd9a5a7698336b28ef3a7c16a3a1b1d2d5fb17dc8ed04022bbe08cc5459073a15bdafa3a8a58cdd56080784bdd69fa70b1ae8597565c799c57ed00f0e120.js" defer></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.4.2/tocbot.min.js"></script>
<script>
    tocbot.init({
        
        tocSelector: '.js-toc',
        
        contentSelector: '.js-toc-content',
        
        headingSelector: 'h1, h2, h3',
        
        hasInnerContainers: true,
    });
</script>

<script src="https://cdn1.lncld.net/static/js/3.0.4/av-min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/valine"></script>
<script type="text/javascript">
    var GUEST = ['nick', 'mail', 'link'];
    var meta = 'nick,mail';
    meta = meta.split(',').filter(function (item) {
        return GUEST.indexOf(item) > -1;
    });
    new Valine({
        el: '#vcomments',
        verify: null ,
        notify: null ,
        appId: 'IyAB0PSPRazTPDxitO1ddQ7O-gzGzoHsz',
        appKey: '5rBJTq4KidYF33eXwvRVhtEH',
        placeholder: 'enjoy~',
        avatar: 'mm',
        meta: meta,
        pageSize: '10' || 10,
        visitor: false 
});
</script>

  </body>
</html>
